package com.Fh_learner.Array;

import java.sql.SQLOutput;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Array_method {
    public static void main(String[] args) {
        //1） toString返回数组的字符串形式
        Integer[] arr = {1,5,32,7,78};
        //对于之前的遍历则是使用for循环
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        //很麻烦，就此引入一下方法
        System.out.println(Arrays.toString(arr));
        //2) 演示 sort 方法的使用
        //因为数组是引用类型，所以通过sort排序后，会直接影响到实参 arr
        Arrays.sort(arr);//默认从小到大的排列
        System.out.println(Arrays.toString(arr));
        //这里自定义设置一个从大到小的
        //1. sort是重载的，可以通过传入一个接口 Comparator 实现定制排序
        //2. 调用 定制排序 时，传入两个参数 1） 排序的数组。 2） 实现了 Comparator 接口的匿名内部类，要求实现 compare 方法
        Arrays.sort(arr,new Comparator(){
                    @Override
                   public int compare(Object o1, Object o2) {
                        Integer i1 = (Integer) o1;
                        Integer i2 = (Integer) o2;
                        return i2-i1;
                    }
                });
        System.out.println("===========从高到低排序后===========");
        System.out.println(Arrays.toString(arr));
        //3) binarySearch 通过二分搜索法进行查找，要求必须安排好
        Integer[] arr2 = {1,2,90,123,567};
        //1. 要求数组有序，如果数组是无序的，不能使用二分查找
        //2. 如果数组中不存在该元素，就返回 -low-1[具体通过debug得知]
        int index = Arrays.binarySearch(arr2,245);
        System.out.println(index);
        //4) copyOf数组元素的复制
        //1. 从arr数组中，拷贝arr。length个元素到newArr数组中
        //2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
        //3. 如果拷贝长度 < 0 就抛出异常 NegativeArraySizeException
        //4. 该方法的底层使用的是 System.arraycopy()
        Integer[] newArr = Arrays.copyOf(arr2,arr2.length);
        System.out.println("====拷贝执行完毕====");
        System.out.println(Arrays.toString(newArr));
        //5) fill 数组元素的填充
        Integer[] num = new Integer[]{9,3,2};
        Arrays.fill(num,99);
        //此处的填充的意思是。使用99填充num数组，理解为将原有的元素全部替换为99
        System.out.println("===num数组填充后===");
        System.out.println(Arrays.toString(num));
        //6） equals 比较两个数组元素内容是否完全一致
        //此处返回的布尔类型，若相同返回true，否则为false
        boolean equals = Arrays.equals(arr,arr2);
        System.out.println(equals);
        //7) asList 将一组值， 转换成list
        //1. asList方法，会将(2,3,4,5,6,1)数据转成一个List集合
        //2. 返回的asList编译类型 List（接口）
        //3. asList 运行类型 java.util.Arrays#ArrayList, 是 Arrays 类的
        // 静态内部类 private static class ArrayList<E> extends AbstractList<E>
        //          implements RandomAccess, java.io.Serializable
        List aslist = Arrays.asList(2, 3, 4, 5, 6, 1);
        System.out.println("asList = " + aslist);
        System.out.println("aslist的运行类型："+ aslist.getClass());

    }
}
